class Animal():
    # CONSTRUCTOR
    def __init__(self, species, age) -> None:
        self.species = species
        self.age = age

    # OTHERS METHODS
    def make_a_sound(self) -> str:
        print("Make a sound")

    def move(self):
        print("Move")

class Dog(Animal):
    # CONSTRUCTOR
    def __init__(self, species, age, color) -> None:
        super().__init__(species, age) # Call the constructor of the parent class
        self.color = color

    # GETTERS
    def make_a_sound(self) -> str:
        print("Wouaf Wouaf")

    def move(self):
        print("I run on the ground")

class Monkey(Animal):
    # CONSTRUCTOR
    def __init__(self, species, age, color) -> None:
        super().__init__(species) # Call the constructor of the parent class
        self.age = age
        self.color = color

    # GETTERS
    def make_a_sound(self) -> str:
        print("Make a sound")

    def move(self):
        print("I swing on the trees")

class Fish(Animal):
    # CONSTRUCTOR
    def __init__(self, species, age, color) -> None:
        super().__init__(species) # Call the constructor of the parent class
        self.age = age
        self.color = color

    # GETTERS
    def make_a_sound(self) -> str:
        print("Make a sound")

    def move(self):
        print("I swim on the water")

class Husky(Dog):
    # CONSTRUCTOR
    def __init__(self, species, age, color, size) -> None:
        super().__init__(species, age, color) # Call the constructor of the parent class
        self.size = size

    # GETTERS
    def make_a_sound(self) -> str:
        print("Wouaf Wouaf")

    def move(self):
        print("I run on the ground very fast")
    
    def run_in_snow(self):
        print("I love to run in the snow")
    
    def pull_sled(self):
        print("I can pull a sled")

class Shiba(Dog):
    # CONSTRUCTOR
    def __init__(self, species, age, color, size) -> None:
        super().__init__(species, age, color) # Call the constructor of the parent class
        self.size = size

    # GETTERS
    def make_a_sound(self) -> str:
        print("Wouaf Wouaf")

    def move(self):
        print("I run on the ground very fast")